package algorithm.array;

import util.GsonUtil;

/**
 * leetcode : https://leetcode.com/problems/remove-element/description/
 * Diffculty: Easy
 *
 * 移除数组中指定的value, 返回新数组的长度
 *
 * 注意：
 * 题目要求 in place 也就是说，不能新建其他数组，空间复杂度必须保持在O(1)
 *
 * 思路：
 * 两个游标 i 和 j 一起向右移动
 * i作为游标，逐个遍历元素与val进行比较
 * j 有两个作用。j的值为与val不同元素的数量。同时j此时的位置，停留在于val相同元素的位置
 *
 * 所以：
 * 最终返回值时，直接将j作为结果返回即可
 * 遇到 num[i] != val 时，将i的值赋值给j的位置，同时自增j
 *
 * @Author Antony
 * @Since 2018/6/27 17:45
 */
public class RemoveElement {

    public static void main(String[] args) {
        int[] arr = new int[]{3,2,2,3};
        int k = 3;
        int result = removeElement(arr,k);
        System.out.println(result+" " + GsonUtil.toJson(arr));

    }

    public static int removeElement(int[] nums, int val) {
        int j=0;
        for(int i=0; i<nums.length; i++){
            if(nums[i] == val){
                continue;
            }
            nums[j] = nums[i];
            j++;
        }

        return j;
    }

}
